package code.example.base.collection.map;

import code.example.tool.LogFactory;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.BiConsumer;

/**
 * ConcurrentHashMap 并发的HashMap.内部使用cas+synchronized,保证线程安全。
 * 内部使用数组+链表结构，
 *
 * get 无锁,put 时如果数组下标无元素占用，则使用cas ,否则使用synchronized 把元素添加到链表尾部。
 *
 * 数组默认初始大小==16，如给定capacity  ,数组大小=大于capacity 的2的N次方。
 *
 */
public class TestConcurrentHashMap {
    public void test(){
        int count = 100;
        Map<Integer,Integer > map = new ConcurrentHashMap<Integer,Integer>();
        for(int i=0;i<count;i++){
            map.put(i,i);
        }

        map.forEach(new BiConsumer<Integer, Integer>() {
            @Override
            public void accept(Integer key, Integer value) {
                LogFactory.getLog().info("key:"+key+",value:"+value);
            }
        });
    }
    public static void main(String args []) {
        new TestConcurrentHashMap().test();
    }
}
